package br.com.dallasmotopecas.venda.agenda.managerbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.dallasmotopecas.comum.agenda.vo.AgendaClienteAtendimentoVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaClienteReagendamentoVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaClienteVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaLembrarVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaSolicitacaoAjudaVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaStatusVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaTipoAtendimentoVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaTipoContatoVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaVo;
import br.com.dallasmotopecas.comum.cliente.vo.ClienteVo;
import br.com.dallasmotopecas.seguranca.usuario.vo.UsuarioVo;
import br.com.dallasmotopecas.util.converter.ConverterNumeros;
import br.com.dallasmotopecas.util.data.ManipulacaoData;
import br.com.dallasmotopecas.util.exception.AgendaCadastradaException;
import br.com.dallasmotopecas.util.exception.AgendaEmEdicaoException;
import br.com.dallasmotopecas.util.exception.AlterarObjetoException;
import br.com.dallasmotopecas.util.exception.CampoObrigatorioException;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.ConsultarObjetoException;
import br.com.dallasmotopecas.util.exception.DirecionamentoPaginaException;
import br.com.dallasmotopecas.util.exception.InserirObjetoException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;
import br.com.dallasmotopecas.util.exception.NumeroFormatoInvalidoException;
import br.com.dallasmotopecas.util.exception.RegistroExistenteException;
import br.com.dallasmotopecas.util.managerbean.AbstractManagerBean;
import br.com.dallasmotopecas.util.validacao.ValidarObjeto;
import br.com.dallasmotopecas.venda.agenda.controller.ManagerAtendimentoController;

@ManagedBean(name="atenderAgendaManagerBean")
@ViewScoped
public class AtenderAgendaManagerBean extends AbstractManagerBean implements Serializable
{
	private static final long serialVersionUID = 1L;
	
	private AgendaVo agendaVo;
	private AgendaClienteVo agendaClienteVo;
	private AgendaClienteAtendimentoVo agendaClienteAtendimentoVo;
	private List<ClienteVo> listaClientes;
	private List<AgendaTipoAtendimentoVo> listaTipoAtendimento;
	private List<AgendaTipoContatoVo> listaTipoContato;
	private List<AgendaStatusVo> listaStatus;
	private List<AgendaLembrarVo> listaLembrar;
	private List<AgendaLembrarVo> listaLembrarReagendamento;
	private List<AgendaClienteAtendimentoVo> listaAtendimentos;
	private List<AgendaClienteReagendamentoVo> listaReagendamentos;
	private boolean desabilitaAgenda;
	private String busca;
	private Date horaAtual;
	private Date dataReagendamento;
	private Date dataCorrente;
	private AgendaClienteReagendamentoVo agendaClienteReagendamentoVo;
	private List<UsuarioVo> listaUsuario;
	private AgendaSolicitacaoAjudaVo agendaSolicitacaoAjudaVo;
	private int intervaloTempo;
	
	public AtenderAgendaManagerBean()
	{
		
	}
	
	public AgendaVo getAgendaVo()
	{
		if (agendaVo == null) agendaVo = new AgendaVo();
		
		agendaVo.setUsuarioVo(getUsuarioLogado());
		return agendaVo;
	}

	public void setAgendaVo(AgendaVo agendaVo)
	{
		this.agendaVo = agendaVo;
	}

	public AgendaClienteVo getAgendaClienteVo()
	{
		if (agendaClienteVo == null) agendaClienteVo = new AgendaClienteVo();
		
		return agendaClienteVo;
	}

	public void setAgendaClienteVo(AgendaClienteVo agendaClienteVo)
	{
		this.agendaClienteVo = agendaClienteVo;
	}

	public AgendaClienteAtendimentoVo getAgendaClienteAtendimentoVo()
	{
		if (agendaClienteAtendimentoVo == null) agendaClienteAtendimentoVo = new AgendaClienteAtendimentoVo();
		
		return agendaClienteAtendimentoVo;
	}

	public void setAgendaClienteAtendimentoVo(AgendaClienteAtendimentoVo agendaClienteAtendimentoVo)
	{
		this.agendaClienteAtendimentoVo = agendaClienteAtendimentoVo;
	}

	public boolean isDesabilitaAgenda()
	{
		return desabilitaAgenda;
	}

	public void setDesabilitaAgenda(boolean desabilitaAgenda)
	{
		this.desabilitaAgenda = desabilitaAgenda;
	}

	public List<ClienteVo> getListaClientes()
	{
		if (listaClientes == null) listaClientes = new ArrayList<ClienteVo>();
		
		return listaClientes;
	}

	public List<AgendaTipoAtendimentoVo> getListaTipoAtendimento()
	{
		if (listaTipoAtendimento == null) listaTipoAtendimento = new ArrayList<AgendaTipoAtendimentoVo>();
		
		return listaTipoAtendimento;
	}

	public void setListaTipoAtendimento(List<AgendaTipoAtendimentoVo> listaTipoAtendimento)
	{
		this.listaTipoAtendimento = listaTipoAtendimento;
	}

	public List<AgendaTipoContatoVo> getListaTipoContato()
	{
		if (listaTipoContato == null) listaTipoContato = new ArrayList<AgendaTipoContatoVo>();
		
		return listaTipoContato;
	}

	public void setListaTipoContato(List<AgendaTipoContatoVo> listaTipoContato)
	{
		this.listaTipoContato = listaTipoContato;
	}

	public void setListaClientes(List<ClienteVo> listaClientes)
	{
		this.listaClientes = listaClientes;
	}
	
	public List<AgendaStatusVo> getListaStatus()
    {
		if (listaStatus == null) listaStatus = new ArrayList<AgendaStatusVo>();
            
        return listaStatus;
    }

    public void setListaStatus(List<AgendaStatusVo> listaStatus)
    {
    	this.listaStatus = listaStatus;
    }

	public List<AgendaClienteAtendimentoVo> getListaAtendimentos()
	{
		return listaAtendimentos;
	}

	public void setListaAtendimentos(List<AgendaClienteAtendimentoVo> listaAtendimentos)
	{
		if (listaAtendimentos == null) listaAtendimentos = new ArrayList<AgendaClienteAtendimentoVo>();
		
		this.listaAtendimentos = listaAtendimentos;
	}

	public String getBusca()
	{
		return busca;
	}

	public void setBusca(String busca)
	{
		this.busca = busca;
	}

	public Date getHoraAtual()
	{
		return horaAtual;
	}

	public void setHoraAtual(Date horaAtual)
	{
		this.horaAtual = horaAtual;
	}

	public Date getDataReagendamento()
	{
		return dataReagendamento;
	}

	public void setDataReagendamento(Date dataReagendamento)
	{
		this.dataReagendamento = dataReagendamento;
	}
	
	public Date getDataCorrente()
    {
		dataCorrente = ManipulacaoData.getPrimeiroDiaUtilSemanaDataCorrente();
            
        return dataCorrente;
    }

    public void setDataCorrente(Date dataCorrente)
    {
            this.dataCorrente = dataCorrente;
    }

	public List<AgendaClienteReagendamentoVo> getListaReagendamentos()
	{
		if (listaReagendamentos == null) listaReagendamentos = new ArrayList<AgendaClienteReagendamentoVo>();
		
		return listaReagendamentos;
	}

	public void setListaReagendamentos(List<AgendaClienteReagendamentoVo> listaReagendamentos)
	{
		this.listaReagendamentos = listaReagendamentos;
	}

	public AgendaClienteReagendamentoVo getAgendaClienteReagendamentoVo()
	{
		if (agendaClienteReagendamentoVo == null) agendaClienteReagendamentoVo = new AgendaClienteReagendamentoVo();
		
		return agendaClienteReagendamentoVo;
	}

	public void setAgendaClienteReagendamentoVo(AgendaClienteReagendamentoVo agendaClienteReagendamentoVo)
	{
		this.agendaClienteReagendamentoVo = agendaClienteReagendamentoVo;
	}

	public List<UsuarioVo> getListaUsuario()
	{
		if (listaUsuario == null) listaUsuario = new ArrayList<UsuarioVo>();
		
		return listaUsuario;
	}

	public void setListaUsuario(List<UsuarioVo> listaUsuario)
	{
		this.listaUsuario = listaUsuario;
	}

	public AgendaSolicitacaoAjudaVo getAgendaSolicitacaoAjudaVo()
	{
		if (agendaSolicitacaoAjudaVo == null) agendaSolicitacaoAjudaVo = new AgendaSolicitacaoAjudaVo();
		
		return agendaSolicitacaoAjudaVo;
	}

	public void setAgendaSolicitacaoAjudaVo(AgendaSolicitacaoAjudaVo agendaSolicitacaoAjudaVo)
	{
		this.agendaSolicitacaoAjudaVo = agendaSolicitacaoAjudaVo;
	}

	public int getIntervaloTempo()
	{
		return intervaloTempo;
	}

	public void setIntervaloTempo(int intervaloTempo)
	{
		this.intervaloTempo = intervaloTempo;
	}

	public List<AgendaLembrarVo> getListaLembrar()
	{
		if (listaLembrar == null) listaLembrar = new ArrayList<AgendaLembrarVo>();
		
		return listaLembrar;
	}

	public List<AgendaLembrarVo> getListaLembrarReagendamento()
	{
		if (listaLembrarReagendamento == null) listaLembrarReagendamento = new ArrayList<AgendaLembrarVo>();
		
		return listaLembrarReagendamento;
	}

	public void setListaLembrarReagendamento(
			List<AgendaLembrarVo> listaLembrarReagendamento)
	{
		this.listaLembrarReagendamento = listaLembrarReagendamento;
	}

	public void setListaLembrar(List<AgendaLembrarVo> listaLembrar)
	{
		this.listaLembrar = listaLembrar;
	}

	@PostConstruct
	public void init()
	{
		try
		{
			if (!isUsuarioLogado())
			{
				redirecionarPagina("/Index.jsf");
				return;
			}
			processaPermissaoUsuario(getUsuarioLogado());
			inicializarAtendimeno();
			setIntervaloTempo(900);
		}
		catch(DirecionamentoPaginaException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
	}
	
	@PreDestroy
	public void destroy()
	{
		setAgendaVo(null);
		setAgendaClienteVo(null);
		setAgendaClienteAtendimentoVo(null);
		
		if (getListaClientes() != null)
		{
			getListaClientes().clear();
			setListaClientes(null);
		}
		
		if (getListaTipoAtendimento() != null)
		{
			getListaTipoAtendimento().clear();
			setListaTipoAtendimento(null);
		}
		
		if (getListaTipoContato() != null)
		{
			getListaTipoContato().clear();
			setListaTipoContato(null);
		}
		
		if (getListaStatus() != null)
		{
			getListaStatus().clear();
			setListaStatus(null);
		}
		
		if (getListaAtendimentos() != null)
		{
			getListaAtendimentos().clear();
			setListaAtendimentos(null);
		}
		
		if (getListaReagendamentos() != null)
		{
			getListaReagendamentos().clear();
			setListaReagendamentos(null);
		}
		
		getListaLembrar().clear();
		setListaLembrar(null);
		getListaLembrarReagendamento().clear();
		setListaLembrarReagendamento(null);
		setBusca(null);
		setHoraAtual(null);
		setDataReagendamento(null);
		setDataCorrente(null);
		setAgendaClienteReagendamentoVo(null);
		
		if (getListaUsuario() != null)
		{
			getListaUsuario().clear();
			setListaUsuario(null);
		}
		
		setAgendaSolicitacaoAjudaVo(null);
		setIntervaloTempo(0);
	}
	
	public void inicializarAtendimeno()
	{
		ManagerAtendimentoController managerAtendimentoController = null;
		try
		{
			limparDados();
			managerAtendimentoController = new ManagerAtendimentoController(getContexto());
			managerAtendimentoController.inicializarAtendimento(getAgendaVo(), getListaUsuario(), getListaTipoAtendimento(), getListaTipoContato(), getListaStatus(), getListaLembrar(), getListaLembrarReagendamento());
		}
		catch(ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConsultarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (CampoObrigatorioException e)
		{
			processarMensagem(MENSAGEM_ALERTA, e.getMessage());
		}
		catch (InserirObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (managerAtendimentoController != null)
			{
				managerAtendimentoController.close();
				managerAtendimentoController = null;
			}
		}
	}
	
	public void atualizarComRefresh()
	{
		ManagerAtendimentoController managerAtendimentoController = null;
		try
		{
			managerAtendimentoController = new ManagerAtendimentoController(getContexto());
			managerAtendimentoController.inicializarAtendimento(getAgendaVo(), getListaUsuario(), getListaTipoAtendimento(), getListaTipoContato(), getListaStatus(), getListaLembrar(), getListaLembrarReagendamento());
		}
		catch(ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConsultarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (CampoObrigatorioException e)
		{
			processarMensagem(MENSAGEM_ALERTA, e.getMessage());
		}
		catch (InserirObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (managerAtendimentoController != null)
			{
				managerAtendimentoController.close();
				managerAtendimentoController = null;
			}
		}
	}
	
	public void buscarClientes()
	{
		ManagerAtendimentoController managerAtendimentoController = null;
		ClienteVo clienteVo = null;
		try
		{
			clienteVo = new ClienteVo();
			clienteVo.setFuncionarioVo(getUsuarioLogado().getVendedorVo());
			
			if (ValidarObjeto.isSomenteNumeros(getBusca()))
				clienteVo.setId(ConverterNumeros.getStringParaLong(getBusca()));
			else
				clienteVo.setRazao(getBusca());
			
			managerAtendimentoController = new ManagerAtendimentoController(getContexto());
			managerAtendimentoController.consultarCliente(getListaClientes(), clienteVo);
		}
		catch(ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (NumeroFormatoInvalidoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (managerAtendimentoController != null)
			{
				managerAtendimentoController.close();
				managerAtendimentoController = null;
			}
			
			clienteVo = null;
		}
	}
	
	public void adicionarClienteAgenda(ClienteVo clienteVo)
	{
		ManagerAtendimentoController managerAtendimentoController = null;
		try
		{
			managerAtendimentoController = new ManagerAtendimentoController(getContexto());
			managerAtendimentoController.adicionarClienteAgenda(getAgendaVo(), clienteVo);
			inicializarAtendimeno();
		}
		catch(ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (CampoObrigatorioException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (InserirObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConsultarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (RegistroExistenteException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		finally
		{
			if (managerAtendimentoController != null)
			{
				managerAtendimentoController.close();
				managerAtendimentoController = null;
			}
		}
	}
	
	public void atenderCliente(AgendaClienteVo agendaClienteVo)
	{
		ManagerAtendimentoController managerAtendimentoController = null;
		try
		{
			setAgendaClienteVo(agendaClienteVo);
			setAgendaClienteAtendimentoVo(new AgendaClienteAtendimentoVo());
			setHoraAtual(new Date());
			managerAtendimentoController = new ManagerAtendimentoController(getContexto());
			managerAtendimentoController.atenderAgenda(getListaTipoAtendimento(), getListaTipoContato(), getListaStatus(), getAgendaClienteVo());
			abrirModal("atendimentoDialog");
		}
		catch(ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (managerAtendimentoController != null)
			{
				managerAtendimentoController.close();
				managerAtendimentoController = null;
			}
		}
	}
	
	public void gravarAtendimento()
	{
		ManagerAtendimentoController managerAtendimentoController = null;
		try
		{
			managerAtendimentoController = new ManagerAtendimentoController(getContexto());
			getAgendaClienteAtendimentoVo().getVendedorVo().setId(getUsuarioLogado().getVendedorVo().getId());
			getAgendaClienteAtendimentoVo().setHoraAtendimento(new java.sql.Time(getHoraAtual().getTime()));
			managerAtendimentoController.gravarAtendimento(getAgendaClienteVo(), getAgendaClienteAtendimentoVo());
			inicializarAtendimeno();
			fecharModal("atendimentoDialog");
		}
		catch(ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (AlterarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (CampoObrigatorioException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (InserirObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (managerAtendimentoController != null)
			{
				managerAtendimentoController.close();
				managerAtendimentoController = null;
			}
		}
	}
	
	public void reagendarCliente(AgendaClienteVo agendaClienteVo)
	{
		setAgendaClienteVo(agendaClienteVo);
		setAgendaClienteReagendamentoVo(new AgendaClienteReagendamentoVo());
		abrirModal("reagendamentoDialog");
	}
	
	public void gravarReagendamento()
	{
		ManagerAtendimentoController managerAtendimentoController = null;
		AgendaVo agendaVo = null;
		try
		{
			agendaVo = new AgendaVo();
			agendaVo.setDataAgenda(new java.sql.Date(getDataReagendamento().getTime()));
			agendaVo.getUsuarioVo().setId(getUsuarioLogado().getId());
			
			managerAtendimentoController = new ManagerAtendimentoController(getContexto());
			managerAtendimentoController.reagendamentoCliente(agendaVo, getAgendaClienteVo(), getAgendaClienteReagendamentoVo());
			inicializarAtendimeno();
			fecharModal("reagendamentoDialog");
		}
		catch(ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConsultarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (CampoObrigatorioException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (InserirObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (AgendaCadastradaException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (RegistroExistenteException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		finally
		{
			if (managerAtendimentoController != null)
			{
				managerAtendimentoController.close();
				managerAtendimentoController = null;
			}
			
			agendaVo = null;
		}
	}
	
	public void listarReagendamentosCliente(AgendaClienteVo agendaClienteVo)
	{
		ManagerAtendimentoController managerAtendimentoController = null;
		try
		{
			setAgendaClienteVo(agendaClienteVo);
			managerAtendimentoController = new ManagerAtendimentoController(getContexto());
			managerAtendimentoController.listarReagendamentoCliente(getAgendaClienteVo(), getListaReagendamentos());
			abrirModal("agendaRegendamentoDialog");
		}
		catch(ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (managerAtendimentoController != null)
			{
				managerAtendimentoController.close();
				managerAtendimentoController = null;
			}
		}
	}
	
	public void listaAtendimentos(AgendaClienteVo agendaClienteVo)
	{
		agendaClienteVo.setAgendaVo(getAgendaVo());
		setAgendaClienteVo(agendaClienteVo);
		abrirModal("agendaAtendimenosDialog");
	}
	
	public void carregarSolicitacaoAjuda(AgendaClienteVo agendaClienteVo)
	{
		AgendaSolicitacaoAjudaVo agendaSolicitacaoAjudaVo = null;
		try
		{
			setAgendaSolicitacaoAjudaVo(new AgendaSolicitacaoAjudaVo());
			agendaSolicitacaoAjudaVo = new AgendaSolicitacaoAjudaVo();
			agendaSolicitacaoAjudaVo.getUsuarioSolicitante().setId(getUsuarioLogado().getId());
			agendaSolicitacaoAjudaVo.setClienteVo(agendaClienteVo.getClienteVo());
			agendaSolicitacaoAjudaVo.setDataSolicitacao(getAgendaVo().getDataAgenda());
			setAgendaSolicitacaoAjudaVo(agendaSolicitacaoAjudaVo);
			abrirModal("solicitacaoAjudaDialog");
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			agendaSolicitacaoAjudaVo = null;
		}
	}
	
	public void gravarSolicitacaoAjuda()
	{
		ManagerAtendimentoController managerAtendimentoController = null;
		try
		{
			managerAtendimentoController = new ManagerAtendimentoController(getContexto());
			managerAtendimentoController.gravarSolicitacaoAjuda(getAgendaSolicitacaoAjudaVo());
			inicializarAtendimeno();
			fecharModal("solicitacaoAjudaDialog");
		}
		catch(ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConsultarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (AgendaCadastradaException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (AgendaEmEdicaoException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (RegistroExistenteException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (CampoObrigatorioException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (InserirObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (managerAtendimentoController != null)
			{
				managerAtendimentoController.close();
				managerAtendimentoController = null;
			}
		}
	}
	
	private void limparDados()
	{
		setAgendaClienteVo(new AgendaClienteVo());
		setAgendaClienteAtendimentoVo(new AgendaClienteAtendimentoVo());
		setAgendaClienteReagendamentoVo(new AgendaClienteReagendamentoVo());
		
		if (getListaClientes() != null)
		{
			getListaClientes().clear();
			setListaClientes(null);
		}
		
		if (getListaAtendimentos() != null)
		{
			getListaAtendimentos().clear();
			setListaAtendimentos(null);
		}
		
		if (getListaReagendamentos() != null)
		{
			getListaReagendamentos().clear();
			setListaReagendamentos(null);
		}
		
		setAgendaClienteReagendamentoVo(null);
		
		if (getListaUsuario() != null)
		{
			getListaUsuario().clear();
			setListaUsuario(null);
		}
	
		setAgendaSolicitacaoAjudaVo(null);
		setBusca("");
		setIntervaloTempo(0);
	}
	
	public void sairAtendimentoAgenda()
	{
		try
		{
			redirecionarPagina("/view/venda/Home.jsf");
		}
		catch (DirecionamentoPaginaException e)
		{
			e.printStackTrace();
		}
	}
	
	public void listarReagendamentosCliente(ClienteVo clienteVo)
	{
		ManagerAtendimentoController managerAtendimentoController = null;
		AgendaClienteVo agendaClienteVo = null;
		try
		{
			agendaClienteVo = new AgendaClienteVo();
			agendaClienteVo.getClienteVo().setId(clienteVo.getId());
			managerAtendimentoController = new ManagerAtendimentoController(getContexto());
			managerAtendimentoController.listarReagendamentoCliente(agendaClienteVo, getListaReagendamentos());
			getAgendaClienteVo().getClienteVo().setRazao(clienteVo.getRazao());
			abrirModal("agendaRegendamentoDialog");
		}
		catch(ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (managerAtendimentoController != null)
			{
				managerAtendimentoController.close();
				managerAtendimentoController = null;
			}
			
			agendaClienteVo = null;
		}
	}
}
